using System;
using System.Collections;
using System.Web;

namespace Sedna.Core.Controller
{
	/// <summary>
	/// a basic interface for any action parameters.
	/// The parameter can be static and dynamic. If it is a static parameter,
	/// than the value is statically defined, e.g. via Spring context configuration.
	/// However, in case of dynamic (or semi-dynamic) parameter, its value is calculated on the fly
	/// taking into consideration the actual values from HttpContext and from ExecutionContext.
	/// As with the actions, Developers are discouraged from using HttpContext directly, unless it is necessary.
	/// This cases can be for parameters tightly coupled with navigation logic.
	/// For any other business logic related parameters, it is unlikely that there be any necessity thereof.
	/// A parameter must define its name and must provide a value in a form of string. The nature of that string
	/// is out of scope of any regulations, though it might be worth mentioning that for URL redirect navigation
	/// related parameters, it will most likely be a string representation of a URL parameter.
	/// The the latter case, a Developer must take appropriate measures to encode the string into URL encoding
	/// so that the target URL be formed in a proper way.
	/// </summary>
	public interface IActionParam
	{
		string Name
		{
			get;
		}

		string GetValue(IExecutionContext executionContext);

	}
}
